package com.javajun.spider.bt7086.common;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;

/**
 * 
 * @author JavaJun
 *
 * @param <T> 对象类型
 * @param <ID> 主键 ID 类型
 */
@NoRepositoryBean
public interface BaseRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T>{

	/**
	 * 这个接口里没有提供任何接口的原因是因为这个接口继承了多个接口。
	 * Repository：最顶层的接口，是一个空的接口，目的是为了统一所有Repository的类型，且能让组件扫描的时候自动识别。
	 * CrudRepository ：是Repository的子接口，提供CRUD的功能
	 * PagingAndSortingRepository：是CrudRepository的子接口，添加分页和排序的功能
	 * JpaRepository：是PagingAndSortingRepository的子接口，增加了一些实用的功能，比如：批量操作等。
	 * JpaSpecificationExecutor：用来做负责查询的接口
	 * Specification：是Spring Data JPA提供的一个查询规范，要做复杂的查询，只需围绕这个规范来设置查询条件即可
	 */
}
